package com.mybook.app.mapper;

import com.mybook.app.core.CommonMapper;
import com.mybook.app.dto.BorrowTimesDto;
import com.mybook.app.dto.TransAndBookInfoAndUserInfoDto;
import com.mybook.app.dto.TransAndBookInfoDto;
import com.mybook.app.model.BookInfo;
import com.mybook.app.model.TransInfo;
import com.mybook.app.renum.BorrowStatusEnum;
import com.mybook.app.renum.UStatusEnum;
import com.mybook.app.request.BorrowListRequest;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

public interface TransInfoMapper extends CommonMapper<TransInfo> {

    public BigDecimal findTransInfoIncomeByBid(@Param("bId") String id);

    public List<String> findTransInfoStatusByBid(@Param("bId") String id);

    public List<TransInfo> findTransInfoByBid(@Param("bId") String id);

    public TransInfo findTransInfoBybidAndUStatus(@Param("id") String id, @Param("uStatus") UStatusEnum uStatusEnum);

    public List<TransInfo> findTransInfoByBidAndUserId(@Param("bId") String id, @Param("userId") String userId);

    public TransAndBookInfoAndUserInfoDto findTransInfoByBidAndUserIdAndApply(@Param("bId") String id, @Param("userId") String userId);


    public List<TransAndBookInfoDto> findTransInfoAndBookInfo(BorrowListRequest borrowListRequest);

    public List<TransAndBookInfoDto> findTransInfoAndBookInfoAndKeeper(BorrowListRequest borrowListRequest);

    public Integer updateTransInfoStatusByIdAndUStatus(@Param("id") String id,
                                                       @Param("status") BorrowStatusEnum borrowStatusEnum,
                                                       @Param("uStatus") UStatusEnum uStatusEnum);

    public Integer updateTransInfoStatusByBIdAndUStatus(@Param("bId") String bid,
                                                        @Param("status") BorrowStatusEnum borrowStatusEnum,
                                                        @Param("uStatus") UStatusEnum uStatusEnum,
                                                        @Param("id") String id);


    public Integer updateTransInfoByIdAndUStatus(@Param("id") String id,
                                                 @Param("status") BorrowStatusEnum borrowStatusEnum,
                                                 @Param("uStatus") UStatusEnum uStatusEnum,
                                                 @Param("iTime") Date iTime,
                                                 @Param("eTime") Date eTime,
                                                 @Param("cost") BigDecimal cost,
                                                 @Param("income") BigDecimal income);

    public TransInfo findTransInfoByIdAndUStatus(@Param("id") String id,
                                                 @Param("uStatus") UStatusEnum uStatusEnum);


    public BorrowTimesDto findBorrowTimesByUserId(@Param("userId") String userId);

    public BorrowTimesDto findLendTimesByUserId(@Param("userId") String userId);


}